iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Security

備考 CISSP 敗部復活 雜草談 系列 第 26

Outline - 软件开发安全

  • 分享至 

  • xImage
  •  
口訣 目的
時時都安全 從生命週期角度來看
處處都安全 從設計階段,做架構設計來看

  • 左邊給工程人員看的,右邊給風險管理者或者是一般人看,提醒各階段需要注意的項目。

8.1 理解安全并将其融入软件开发生命周期 (SDLC) 中

整合安全的開發方法 (時時都安全)
  • 开发方法(例如,Agile、Waterfal、DevOps、DevSecOps)

    • 規劃階段: 寫計畫書、選擇安全開發方法

      • 可預測性、反覆性、預測式(通靈型)
    • Agile

      • 反覆+價值漸增 = 敏捷
        • Iteration + Increment
      • 每一次的反覆交出來的東西要能上線,要能用
      • 能用就有產生價值 (價值漸增)
      • 強調產出、風險管理
      • 每一週期的sprint 結束後都有sprint
      • 透過 review 看 increment
      • 宣言
    • 左邊更重要 - 右側價值

      • 個人與互動 - 流程與工具
      • 可用的軟體 - 詳盡的文件
      • 與客戶合作 - 合約協商
      • 回應變化  - 遵循計劃

    參考敏捷宣言

    • waterfal (瀑布式)
      瀑布模型的六個階段如下
      • 系統要求/可行性
      • 軟件需求/分析
      • 設計
      • 代碼和調試/實施
      • 測試
      • 運營和維護
    • DevOps
      • 角色 (Devloper+Operation)
        • 開發人員 IT營運人員 (+客服人員) 好好合作
      • 讓開發團隊+測試團隊+業務團隊能夠一起溝通。
      • DDD 的價值跟IPT團隊很像
      • CI 程式碼整合
        • Before: ENG 要花一兩小時 - 手動
        • After: 導入CI 後 只要一分鐘
      • CD 布署
        • 沒導入 要花 4-5小時
        • 導入後 只要花5分鐘
        • 安全議題 - 佈署前需要有人授權
    • DevSecOps
      • DEVSECOPS 成熟度模型(DSOMM)
        • 四個級別:
          L1: 對於安全實踐有基本的理解
          L2: 採用基本的安全實踐
          L3: 高度採用安全實踐
          L4: 大規模的進階安全實踐部署
  • 成熟度模型(例如,能力成熟度模型 (CMM)、软件保障成熟度模型 (SAMM))

    • 為啥要談? 技術外包的時候,要考慮外面團隊的能力成熟度,在採購計畫書時需要註明這一點
  • 操作与维护

  • 变更管理

    • 需求控制 (跟你提申請要做)
    • 變更控制 (真的去做)
    • 釋出控制 (變成基準)
  • 综合产品团队 (IPT)

補充
  • SDLC (每個階段都有重點)
    • 計畫
    • 規劃
    • 分析
      1. 需求蒐集 (URS) (PBA - 引出需求(引導客戶把真正需求講出來, 採訪) >>
      2. 需求分析 (ER圖 關聯圖)
      3. 需求文件化 (SRS)
        • use case
        • 誤用案例
        • backlog
      4. V&V (需求規格 , 外確 符合客戶的有效性
        • 全公司跟 PM 要驗規格
        • SA 寫系統文件也要驗,QA 也會驗,誰要驗 都可以驗
        • QM 就是要驗 TQM 透過流程管控 ISO (safety)
      • 出事就是PM 擔 (開規格)
      1. baseline (基準)
    • 開發設計
      數據庫議題
      • ACID 測試 - 數據完整性
        原子性、一致性、隔離性、持久性 (ACID) 是一組屬性,可確保寫入數據庫的數據準確且值得信賴。
        • 原子性——確保整個事務成功或回滾。如果事務的一部分失敗,一切都會回滾,就好像沒有事務發生一樣。
        • 一致性——確保事務不能將數據庫從有效狀態變為無效狀態。所有記錄都必須遵循數據庫規則。例如,記錄必須有一個主鍵。
        • 隔離——確保並發事務不會相互干擾。
        • 持久性 - 確保在事務完成後更改將保持不變且無法回滾。
        • 實體完整性
          • Primary Key
          • 主鍵重覆才當作重覆,產生重覆則完整性出問題
        • 參考完整性
          • 用交易 Transaction 來保護參考完整性
          • 定義Foreign Key,建立Relaton
          • 透過交易去控制 Clark-Wilson
        • 語意完整性
          • 控制資料型態 控制資料範圍 限定輸入方式
      • 高聚合:程式相關性越多得要包再一起
      • 低偶合:不要利用到其他程式的功能,要用第三方元件的話,當有問題時不會影響自己

測試階段

  • 測試種類 (可以隨便選)
    • 黑箱、灰箱、白箱
    • 主動、被動
    • 手動、自動
    • 靜態、動態
      • 靜態測試:未執行該軟體(屬Program),放置於硬碟進行測試
        • SAST
      • 動態測試:已執行該軟體(屬Process),已被載入記憶體中進行測試
        • DAST
  • 測試技術 (要照順序講)
    • 單元測試
      • TDD,BDD
    • code review (同行審查)
    • 整合測試
    • 模糊測試
    • 回歸測試
    • 系統測試(安全測試、效能測試、壓力測試)
    • 驗收測試(UAT)
    • 安裝測試 - 模擬使用者行為
    • 合成交易Synthetic Transactions,寫腳本進行監控 例如: 使用selenium

8.2 在软件开发环境中识别和应用安全控制

標題關鍵字(落在名詞): 安全控制 (控制措施)
  • 编程语言

    • 幾代的語言 (1~5代)
    • OOP 和Mobile code
    • 可以重複使用的code
    • OpenSSL library (CVE安全問題)
  • 成套工具

    • toolset
    • 工具集 (開發工具)
  • 集成开发环境 (IDE)

  • 运行时间

    • runtime
    • 程式在執行時期的環境 (Bruce 提供)
    • 可以在模擬不同OS的環境下去執行,例如JVM
  • 持续集成和持续交付 (CI/CD)

    • 連續整合: 根據不同條件持續整合
    • 重點: 快速地做系統的交付或整合
    • 安全議題:
      • 任何人都可以很輕易將不安全的代碼發布到正式環境
  • 安全编排自动化与响应 (SOAR)

    • 可以做整合的回應,會自動偵測到事件後會去做相關回應
      • 設備聯防機制
      • 為啥要這寫,而不是Domain 7 安全運營?
        • SOAR 重點在playbook (寫劇本後去執行)
        • 應該要在IDS 那邊一起談
  • 软件配置管理 (SCM)

    • 版本控制
    • 寫程式時會有一個設定檔,例如: MS 系統中.ini/ .xml/ .json (設定檔)或存在機碼內
    • 安全議題
      • 資料庫脫庫問題 (SQL injection)
  • 代码存储库

  • 应用程序安全性测试(例如,静态应用程序安全测试 (SAST)、动态应用程序安全测试 (DAST))

8.3 评估软件安全的有效性

軟體安全性?? 就是在談安全評鑑,透過查驗訪談測試,看安全控制措施是否有效,這邊著重在軟體上
  • 更改审核和记录
    • 被查核時要有依據,基本上就是在講變更管理
  • 风险分析和缓释

8.4 评估获得软件对安全的影响

關鍵字: 從外面來的東西
  • 商业成品 (COTS)
    • 商業軟體,不是免費的
    • 共同供應契約 (供契),之前有一些控制措施已經被審核過了,公務機關會使用
  • 开源 (OSS)
    • 核心觀念: 開放原始碼給你用,不是免費,有版權問題
    • 版權問題要特別注意: GPL、Apache (授權手法要注意)
    • Open source 不是免費
    • 安全議題
      • 侵權、安全問題、技術資源問題
  • 第三方
    • 一定有人接你的開發案,用別人寫的元件,這就是第三方
      • 程式我寫,但我直接買別人的元件,最後出包
  • 托管服务(例如,软件即服务 (SaaS)、基础架构即服务 (IaaS)、平台即服务 (PaaS))

    • 雲業者提供的服務
    • 被人家管的都不是你的,例如: M365

8.5 定义并应用安全编码准则和标准

重點: 程式開發的指引跟標準
  • 類別是封裝跟方法
    • 要不要命名屬性或類別名稱
    • 通常會有一份命名慣例
      • 例如: 動詞加名詞
      • isNumber
  • 源代码级安全弱点和漏洞

    • 不要寫太爛的程式碼
      • 例如: For迴圈的龜派氣功

      圖片引用自FOR版本的龜派氣功

      • 所有的輸入參數都不檢查
    • 防範: 輸入參數檢查
  • 应用编程接口 (API) 安全

    • API: 網路提供服務
      • 具備要素: 名稱跟服務
      • 安全議題:
        • 透過GET濫用
        • 超過服務系統能夠支持的需求
          • 可能有這需求,但服務系統不支持
        • 模糊測試
        • Injection (注入測試)
        • OWASP 有提供相關的專案
  • 安全编码实践

    • 指引跟標準
      • 要告知撰寫人怎麼做及相關要求
    • code review
    • TDD 或去考個相關證照
  • 软件定义安全

    • 軟體定義安全(Software Defined Security,SDS)是從軟體定義網路(Software Defined Network,SDN)引申而來,原理是將物理及虛擬的網路安全設備與其接入模式、部署方式、實現功能進行了解耦,底層抽象為安全資源池裡的資源,頂層統一通過軟體編程的方式進行智慧型化、自動化的業務編排和管理,以完成相應的安全功能,從而實現一種靈活的安全防護。

    引用自軟體定義安全

參考資料


上一篇
Outline - 安全运营
下一篇
CISSP 目標、風險與方法 (上)
系列文
備考 CISSP 敗部復活 雜草談 35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言